home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / kh_table.cpp < prev    next >
C/C++ Source or Header  |  1994-10-10  |  4KB  |  204 lines

  1. #include "kh_table.h"
  2.  
  3. KH_TableView::KH_TableView(int w, int h, int col, int* wid, int* colNum)
  4.     {
  5.     yStart = 0;
  6.     yPos = 0;
  7.     xStart = 0;
  8.     xPos = 0;
  9.     xCurs = 0;
  10.     yCurs = 0;
  11.     xScreen = w;
  12.     yScreen = h;
  13.     nColumns = col == -1 ? getColumnNumber() : col;
  14.     iColWidth = wid;       // Array of widths of col.
  15.     colNumbers = colNum;
  16.     }
  17. //////////////////////////////
  18. int KH_TableView::Left()
  19.     {
  20.     if(xPos > 0)
  21.     {
  22.     xCurs--;
  23.     xPos -= iColWidth[colNumbers[xCurs]];
  24.     return 0;
  25.     }
  26.     if(xPos == 0 && xStart)
  27.     {
  28.     xCurs--;
  29.     xStart -= iColWidth[colNumbers[xCurs]];
  30.     return 1;
  31.     }
  32.     return 0;
  33.     }
  34. //////////////////////////////////
  35. int KH_TableView::Right()
  36.     {
  37.     if(xCurs < nColumns - 1)
  38.     {
  39.     if(xPos + iColWidth[colNumbers[xCurs]]
  40.         >= xScreen - iColWidth[colNumbers[xCurs + 1]])
  41.         {
  42.         xStart += xPos + iColWidth[colNumbers[xCurs]];
  43.         xCurs++;
  44.         xPos = 0;
  45.         return 1;
  46.         }
  47.     else
  48.         {
  49.         xPos += iColWidth[colNumbers[xCurs]];
  50.         xCurs++;
  51.         return 0;
  52.         }
  53.     }
  54.     return 0;
  55.     }
  56. ///////////////////////////////////
  57. int KH_TableView::Up()
  58.     {
  59.     if(yPos > 0)
  60.     {
  61.     yCurs--;
  62.     yPos--;
  63.     return 0;
  64.     }
  65.     if(yPos == 0 && yStart)
  66.     {
  67.     yCurs--;
  68.     yStart--;
  69.     return 1;
  70.     }
  71.     return 0;
  72.     }
  73. ////////////////////////////////
  74. int KH_TableView::Down()
  75.     {
  76.     if(yCurs < RecordNumber() - 1 || RecordNumber() == -1)
  77.     {
  78.     if(yPos + 3 >= yScreen)
  79.         {
  80.         yStart += yPos;
  81.         yPos = 0;
  82.         yCurs++;
  83.         return 1;
  84.         }
  85.     else
  86.         {
  87.         yPos++;
  88.         yCurs++;
  89.         return 0;
  90.         }
  91.     }
  92.     return 0;
  93.     }
  94. ////////////////////////////////
  95. void KH_TableView::Home()
  96.     {
  97.     xStart = xPos = xCurs = 0;
  98.     }
  99. ////////////////////////////////
  100. void KH_TableView::End()
  101.     {
  102.     xStart = 0;
  103.     for(int j = 0; j < nColumns - 1; j++)
  104.     xStart += iColWidth[colNumbers[j]];
  105.     xCurs = nColumns - 1;
  106.     xPos = 0;
  107.     }
  108. ////////////////////////////////
  109. void KH_TableView::PgUp()
  110.     {
  111.     if(yStart > yScreen)
  112.     yStart -= yScreen - 1;
  113.     else
  114.     yStart = yPos = 0;
  115.     yCurs = yStart;
  116.     }
  117. ////////////////////////////////
  118. void KH_TableView::PgDown()
  119.     {
  120.     if(RecordNumber() - 1 - yCurs > yScreen || RecordNumber() == -1)
  121.     yStart += yScreen - 1;
  122.     else
  123.     {
  124.     yStart = RecordNumber() - 1;
  125.     yPos = 0;
  126.     }
  127.     yCurs = yStart;
  128.     }
  129. ////////////////////////////////
  130. void KH_TableView::CtrlPgUp()
  131.     {
  132.     yStart = yPos = yCurs = 0;
  133.     }
  134. ////////////////////////////////
  135. void KH_TableView::CtrlPgDown()
  136.     {
  137.     yStart = yCurs = RecordNumber() - 1;
  138.     yPos = 0;
  139.     }
  140. ////////////////////////////////
  141. void KH_TableView::PgLeft()
  142.     {
  143.     for(int i = 0, x = 0; x < xStart; i++)
  144.     x += iColWidth[colNumbers[i]];
  145.     for(i = i - 1, x = xStart;
  146.     x > xStart - xScreen && i >= 0; i--)
  147.     x -= iColWidth[colNumbers[i]];
  148.     xCurs = i + 1;
  149.     xPos = 0;
  150.     xStart = x;
  151.     }
  152. ////////////////////////////////
  153. void KH_TableView::PgRight()
  154.     {
  155.     for(int i = 0, x = 0;
  156.     x < xScreen + xPos && i < nColumns - 1;    i++)
  157.     x += iColWidth[colNumbers[i]];
  158.     xCurs = i;
  159.     xPos = 0;
  160.     xStart = x;
  161.     }
  162. ////////////////////////////////
  163. void KH_TableView::moveToCell(loc ms)
  164.     {
  165.     for(int i = 0, x = 0; i < nColumns && x < xStart + ms.X; )
  166.     {
  167.     x += iColWidth[colNumbers[i]];
  168.     i++;
  169.     }
  170.     xPos = x - xStart;
  171.     xCurs = i;
  172.     Left();
  173.  
  174.     if(xPos && xPos + iColWidth[colNumbers[xCurs]] > xScreen)
  175.     {
  176.     xCurs--;
  177.     xPos -= iColWidth[colNumbers[xCurs]];
  178.     }
  179.  
  180.     if(ms.Y <= 0)
  181.     return;
  182.  
  183.     if(ms.Y + yStart > RecordNumber())
  184.     {
  185.     yCurs = RecordNumber() - 1;
  186.     yPos = yCurs - yStart;
  187.     }
  188.     else
  189.     {
  190.     yPos = ms.Y + 1 > yScreen ? yPos : ms.Y - 1;
  191.     yCurs = yPos + yStart;
  192.     }
  193.  
  194.     }
  195. //////////////////////////////
  196. void KH_TableView::Rotate()
  197.     {
  198.     int col = colNumbers[xCurs];
  199.     for(int i = xCurs; i < nColumns - 1; i++)
  200.     colNumbers[i] = colNumbers[i + 1];
  201.     colNumbers[nColumns - 1] = col;
  202.     }
  203.  
  204.